﻿using System;
using System.Linq;
using System.Text;
using Spring.Data.Core;
using System.Collections;
using System.Data;
using Spring.Data;
using Spring.Data.Common;
using GestionadorBaseDatos;
using CRUD.InterfaceDAO;
namespace CRUD.DAO
{
    /// <summary>
    /// Clase encargada de interactuar con la tabla FORMA_PAGO del modelo
    /// </summary>
    public class FormaPagoDao : AdoDaoSupport, IDaoFormaPago
    {
        #region Querys para metodos


        private string sqlGetByNombre = @"select idFormaPago, nombre, descripcion from forma_pago where nombre = @nombre";
        private string sqlGetById = @"select idFormaPago, nombre, descripcion from forma_pago where idFormaPago = @Id";
        private string sqlGetAll = "select idFormaPago, nombre, descripcion from forma_pago";
        private string sqlInsert = "INSERT INTO forma_pago (nombre,descripcion) VALUES (@nombre,@descripcion)";
       
        # endregion

        # region metodos


        public virtual IList GetAll()
        {
            System.Collections.IList lista = AdoTemplate.QueryWithRowMapperDelegate(CommandType.Text, sqlGetAll,
                        delegate(IDataReader iDataReader, int rowNum)
                        {
                            FormaPago formapago = new FormaPago();
                            formapago.IdFormaPago = iDataReader.GetInt32(0);
                            formapago.Nombre = iDataReader.GetString(1);
                            formapago.Descripcion = iDataReader.GetString(2);
                            return formapago;
                        });

            return lista;
        }

        public void Insert(FormaPago crear)//string tipo, string descripcion)
        {

            IDbParameters dbParameters = AdoTemplate.CreateDbParameters();
            dbParameters.Add("@nombre", MySql.Data.MySqlClient.MySqlDbType.String, 50).Value = crear.Nombre;

            dbParameters.Add("@descripcion", MySql.Data.MySqlClient.MySqlDbType.String, 50).Value = crear.Descripcion;

            AdoTemplate.ExecuteNonQuery(CommandType.Text, sqlInsert, dbParameters);


        }
        
       

        public FormaPago GetFormaPagoByNombre(string nombre)
        {
            return (FormaPago)AdoTemplate.QueryForObject(CommandType.Text, sqlGetByNombre, new FormaPagoRowMapper(), "@nombre", DbType.String, 30, nombre);
        }

        public FormaPago GetFormaPagoByNombre(FormaPago forma)

        {
            return (FormaPago)AdoTemplate.QueryForObject(CommandType.Text, sqlGetByNombre, new FormaPagoRowMapper(), "@nombre", DbType.String, 30, forma.Nombre);
        }

      

        public FormaPago GetById(FormaPago Id)
        {
            return (FormaPago)AdoTemplate.QueryForObject(CommandType.Text, sqlGetById, new FormaPagoRowMapper(), "@Id", DbType.Int32, 30, Id.IdFormaPago);
        }
        
        # endregion
    }
}
